package com.test.base.netty.future_promise;

import io.netty.channel.EventLoop;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.util.concurrent.DefaultPromise;
import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.ExecutionException;

@Slf4j
public class UsePromise {

    /**
     * description 使用netty的promise进行消息接受
     * 主要测试内容：promise.get()方法是阻塞时的调用
     * @author zken
     * @CreateDate 2024/11/20 16:27:49
     */
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        // 获取一个eventLoop对象
        EventLoop eventLoop = new NioEventLoopGroup().next();

        // 2. 可以主动创建Promise
        DefaultPromise<Integer> promise = new DefaultPromise<Integer>(eventLoop);
        Thread thread = new Thread(() -> {
            try {
                log.debug("开始计算。。");
                Thread.sleep(1000);
                int ret = 10;
                promise.setSuccess(ret);
            } catch (InterruptedException e) {
                e.printStackTrace(System.err);
                promise.setFailure(e);
            }
        });

        log.debug("等待结果。。");
        // promise.get()方法是阻塞时的调用
        log.debug("结果为：{}", promise.get());

    }
}
